package th.retrofit.lib;

import java.util.LinkedList;
import java.util.List;

/**
 * 给你一个字符串 path ，表示指向某一文件或目录的Unix 风格 绝对路径 （以 '/' 开头），请你将其转化为更加简洁的规范路径。
 *
 * 在 Unix 风格的文件系统中，一个点（.）表示当前目录本身；此外，两个点 （..）表示将目录切换到上一级（指向父目录）；两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠（即，'//'）都被视为单个斜杠 '/' 。 对于此问题，任何其他格式的点（例如，'...'）均被视为文件/目录名称。
 *
 * 请注意，返回的 规范路径 必须遵循下述格式：
 *
 * 始终以斜杠 '/' 开头。
 * 两个目录名之间必须只有一个斜杠 '/' 。
 * 最后一个目录名（如果存在）不能 以 '/' 结尾。
 * 此外，路径仅包含从根目录到目标文件或目录的路径上的目录（即，不含 '.' 或 '..'）。
 * 返回简化后得到的 规范路径 。
 */
public class Solution71 {

    public String simplifyPath(String path) {
        List<String> result = new LinkedList<>();
        int bIndex = 1;
        int pLen = path.length();
        while (bIndex < pLen) {
            String temp;
            int eIndex = path.indexOf('/', bIndex);
            if (eIndex == -1) {
                temp = path.substring(bIndex, pLen);
                bIndex = pLen;
            } else {
                temp = path.substring(bIndex, eIndex);
                bIndex = eIndex + 1;
            }
            if (temp.equals("..")) {
                if (result.size() > 0) {
                    result.remove(result.size() - 1);
                }
            } else if (!temp.equals(".") && !temp.equals("")){
                result.add(temp);
            }
        }
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < result.size(); i++) {
            builder.append('/');
            builder.append(result.get(i));
        }
        return builder.length() == 0 ? "/" : builder.toString();
    }

    public static void main(String[] args) {
        System.out.println(new Solution71().simplifyPath("/home//foo/"));
    }
}
